import { Demension } from './scale.type';

/**
 * validateDemension
 * 校验维度除却正常表单验证之后的其他部分
 * 原因是第一版的时候 使用原生的 rule 配置起来太麻烦，所以就使用这种两次结合的方式去校验
 * @param dimension : Demension
 * @returns {isValidate: boolean, msg: string}
 */
export const validateDemension: (dimension: Demension) => { isValidate: boolean; msg: string } = (dimension: Demension) => {
  console.log(dimension);

  /* 聚合配置中验证是否完善必填项
   *  1- 当聚合类型为 【求和】 时，【包含题目】和【选项得分】不能为空
   *  2- 当聚合类型为 【计数】时，【包含题目】和【计数选项】不能为空
   *  3- 当聚合类型为【其他维度】时，【多维度操作】和【包含维度】不能为空
   */
  const polymerize = dimension.polymerize;
  console.log('🚀 ~ file: tools.ts ~ line 19 ~ polymerize', polymerize);

  // 遍历
  for (const item of polymerize) {
    if (item.type === 'sum') {
      if (!item.includes?.length || item.fens === '') {
        return { isValidate: false, msg: '聚合配置中有必填项为空！' };
      }
    } else if (item.type === 'num') {
      if (!item.includes?.length || item.choice === '') {
        return { isValidate: false, msg: '聚合配置中有必填项为空！' };
      }
    } else if (item.type === 'include') {
      if (item.demensionType === '' || !item.demensions?.length) {
        return { isValidate: false, msg: '聚合配置中有必填项为空！' };
      }
    }
  }

  /**
   * 维度结果中验证是否完善必填项
   * 1- 条件判断
   *  1- 聚合结果为等于或不等于时，val 和 result 不能为空
   *  2- 聚合结果为介于时，val1 、 val2 和 result 不能为空
   */
  const result = dimension.result;
  if (result.type === 'decide') {
    if (!result.decides.length) {
      return { isValidate: false, msg: '维度结果为条件判断时，至少添加一个条件！' };
    }
    for (const item of result.decides) {
      if (item.symbol === 'equal' || item.symbol === 'notequal') {
        if (item.val === '' || item.result === '') {
          return { isValidate: false, msg: '维度结果为条件判断时，有必填项为空！' };
        }
      }
      if (item.symbol === 'in') {
        if (item.val1 === '' || item.val2 === '' || item.result === '') {
          return { isValidate: false, msg: '维度结果为条件判断时，有必填项为空！' };
        }
      }
    }
  } else if (result.type === 'norm_1' || result.type === 'norm_2') {
    if (result.norm.mA === '' || result.norm.mB === '' || result.norm.wA === '' || result.norm.wB) {
      return { isValidate: false, msg: '维度结果为常模计算时，有必填项为空！' };
    }
  }

  /**
   * 匹配报告中验证是否完善必填项
   *  - 遍历各项中的数据，低分和文案必须有
   */
  const report = dimension.reports;
  for (const item of report) {
    if (item.min === '' || item.message === '') {
      return { isValidate: false, msg: '匹配报告中有必填项为空！' };
    }

    console.log('🚀 ~ file: tools.ts ~ line 78 ~ item.min > item.max', item.min, item.max, item.min >= item.max);
    if (item.min >= item.max) {
      return { isValidate: false, msg: '低分应该小于高分！' };
    }
  }

  console.log(1111111);

  // 校验通过
  return { isValidate: true, msg: '' };
};
